Unity

您所在的位置:网站首页 square sound音效下载 Unity

Unity

2023-12-03 04:39| 来源: 网络整理| 查看: 265

今天给自己测试项目添加音效(音效找了好N,免费的甚少,基本收费,对于我们开发测试项目实属不便,找了几个免费的将就着用)。

音量控制类型

游戏里的设置都会有:

整体音量背景音乐音量游戏音效音量

的三种音量控制。

Unity的音效系统我也没接触过,那就边学边用吧。

百度找了一篇讲解得不错得实用教程:Unity AudioMixer 之 Mixer使用及统一管理音量

我也就按里面得方式来实现得。

需要用到得组件、类 AudioMixerAudioSource 组件作用: AudioMixer

AudioMixer创建资源,Project视图->右键->Create->Audio Mixer,如下图: 在这里插入图片描述

它得作用,你可以理解就时音源播放前得混合处理器,里面可以给Group添加各种Sound Effect(我没去一个一个测试,但我知道Pitch可以控制播放音源得频率,可以加快、或时减慢,从而实现降调、与升调得效果,一般汽车引擎声,可以根据速度来控制pitch实现引擎声得降调、升调效果音)

这里我就不全部说明作用,对Group重点说吧(我刚刚才用,也不熟悉):

先打开AudioMixer得窗口,可以从菜单栏->Window->Audio->AudioMixer,或时Ctrl + 8快捷键打开选择Project视图下得AudioMixer资源,然后AudioMixer窗口将会显示该AudioMixer的编辑信息

如下图: 在这里插入图片描述

左边信息中,有个Group,就是我们关注的,Group就是分组的意思。 而AudioSource有个outputAudioMixerGroup,正式这个Group。

默认会有一个叫:Master的Group,不能删,也不能重命名的。 在这里插入图片描述

在Group栏的右上角有个"+"号,添加可以添加想要的分组。 然后命名号Group的名称,我添加了:BGM, EFF,两个,分别用于控制背景音乐、游戏音效的两个分组Group,如下图: 在这里插入图片描述

然后我们先选中BGM的分组,如下: 在这里插入图片描述

这时Inspector视图会显示该分组的各个属性,里面有一个叫:“Attenuation”(衰减)栏下,有个叫"Volume"(音量)的数据Slider控件(滑动条控件),如下图 在这里插入图片描述

我们鼠标右键对准这个"Volume"的标签,右键,在弹出的菜单中选择"Expose’Volume(of BGM)’ to script"(将BGM的Volume属性暴露给脚本的意思),同样的方法,我们将:Master、EFF的分组的Volume都暴露一下。 在这里插入图片描述

这时再回到"AudioMixer"窗口 在这里插入图片描述

发现右上角显示:"Exposed Parameters (3)“的选项,点击一下,会列出各个暴露出来的Volume,再右键对着你想要重命名的选项,选"Rename”,分别该未MASTER_Volume, BGM_Volume, EFF_Volume。 在这里插入图片描述

重点的音量设置:

这三个属性,可以在脚本(C#)中通过:AudioMixer.SetFloat(“BGM_Volume”, float);来设置值即可,float的音量范围是:-80.0f~20.0f

AudioSource

前面我们对AudioMixer有所了解了,AudioSource是对AudioClip播放得一个组件 所以我们在让AudioSource播放前,要设置好他的:AudioClip属性(就是Project中的各种:mp3,wav,ogg,等音频文件)。

这样就可以播放了。

我们这里重点时关注音量,所以AudioSource还有一个属行要重点设置一下:AudioMixerGroup,在Inspector中,叫:Output,如下图: 在这里插入图片描述

该AudioSource的Output属性,还是和之前说明一样,就是AudioSource在输出音频数据前,可以通过Output,处理一下,再输出,这个Output就是AudioMixerGroup(就是我们在AudioMixer窗口中给Group添加的分组)

在脚本中叫:outputAudioMixerGroup,及:AudioSource类中得:outputAudioMixerGroup。

该对象我们可以通过在:AudioMixer.FindMatchingGroups(“BGM”)[0];的API来获取我们在AudioMixer窗口下编辑添加的"BGM"Group分组。

通过下面代码就可以对一个AudioSource.outputAudioMixerGroup设置

AudioSource.outputAudioMixerGroup = AudioMixer.FindMatchingGroups("YourGroupName")[0]; // YourGroupName就是你的分组名称

这样AudioSource.Play()时就会应用上AudioMixer的Attenuation的Volume音量设置。(当然AudioSource本身也有Volume设置的,但那时针对某个文件的特殊处理,我们这里了解统一设置就好了)

好了,上面讲到了AudioMixer的Group如何设置Volume,并暴露API给AudioSource,在脚本中统一处理音量,下面我们看看完整的代码吧。

Code using Unity.Collections; using UnityEngine; using UnityEngine.Audio; /// /// author : jave.lin /// date : 2020.02.15 /// 音效管理 /// public class GlobalAudioManager : MonoBehaviour { private static GlobalAudioManager instance; public static GlobalAudioManager Instance() => instance; [Header("背景音乐与音效的混合器")] public AudioMixer Mixer; [Header("当前正在播放的BGM")] [SerializeField] [ReadOnly] private AudioSource playing_BGM; [Header("Testing")] [SerializeField] [Range(-80f, 20f)] private float master_volume = -10; [SerializeField] [Range(-80f, 20f)] private float bgm_volume = -10; [SerializeField] [Range(-80f, 20f)] private float eff_volume = -10; private void Awake() { if (instance != null) Debug.LogError($"{GetType().Name} instance already exsit."); instance = this; DontDestroyOnLoad(this); } private void Start() { PlayBGM(GetComponent()); // 测试用 } // 这里做测试用,我就放到update中实时更新,正式使用可以在设置的UI面板中的音量的滑动条改动时再设置就好了 private void Update() { SetMASTER_Volume(master_volume); SetBGM_Volume(bgm_volume); SetEFF_Volume(eff_volume); } // 重播BGM public void RestartBGM() { if (playing_BGM != null) { playing_BGM.time = 0; } } // 播放BGM public void PlayBGM(AudioSource bgm) { if (playing_BGM != null) playing_BGM.Stop(); playing_BGM = bgm; playing_BGM.outputAudioMixerGroup = Mixer.FindMatchingGroups("BGM")[0]; playing_BGM.Play(); } // 播放EFF public void PlayEff(AudioSource eff) { eff.outputAudioMixerGroup = Mixer.FindMatchingGroups("EFF")[0]; eff.Play(); } // 获取MASTER音量 public float GetMASTER_Volume() { Mixer.GetFloat("MASTER_Volume", out float value); return value; } // 设置MASTER音量 public void SetMASTER_Volume(float value) { Mixer.SetFloat("MASTER_Volume", Mathf.Clamp(value, -80, 20)); } // 获取BGM音量 public float GetBGM_Volume() { Mixer.GetFloat("BGM_Volume", out float value); return value; } // 设置BGM音量 public void SetBGM_Volume(float value) { Mixer.SetFloat("BGM_Volume", Mathf.Clamp(value, -80, 20)); } // 获取EFF音量 public float GetEFF_Volume() { Mixer.GetFloat("EFF_Volume", out float value); return value; } // 设置EFF音量 public void SetEFF_Volume(float value) { Mixer.SetFloat("EFF_Volume", Mathf.Clamp(value, -80, 20)); } }

最后运行,我们就可以在Inspector中,测试统一的整体音量、背景音乐音量、游戏音效音量,三个属性统一管理了 在这里插入图片描述

References Unity AudioMixer 之 Mixer使用及统一管理音量


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3